* disassembly by Nick Westgate using AppleWin, with thanks to Andy McFadden
* stage 1 is loaded by "30.3FFR" at $30-$3D and $33E-$3FF
* only $340-$361 and $394-$399 are original code
* the rest is tape routines copied from the ROM and slightly modified
*
* stage 2 is loaded at $4000-$B0FF and execution starts at $B000

0030-   00
0031-   00
0032-   FF
0033-   AA
0034-   07
0035-   28
0036-   40 ;(CSW) after stage 1 loads, execute $340
0037-   03
0038-   1B ;(KSW)
0039-   FD
003A-   5F
003B-   03
003C-   3C ;tape read destination is overwritten
003D-   03 ;bytes following $3D are stored at $33E-3FF

033E-   FF
033F-   5F
0340-   A9 F0       LDA   #$F0     ;reset COUT vector
0342-   85 36       STA   $36
0344-   A9 FD       LDA   #$FD
0346-   85 37       STA   $37
0348-   A9 00       LDA   #$00
034A-   85 2A       STA   $2A
034C-   85 2C       STA   $2C
034E-   A9 40       LDA   #$40     ;A1 = dest = $4000
0350-   85 2B       STA   $2B
0352-   A9 B1       LDA   #$B1     ;A2 = end = $B100
0354-   85 2D       STA   $2D
0356-   AD 57 C0    LDA   $C057    ;HIRES
0359-   AD 52 C0    LDA   $C052    ;MIXCLR
035C-   AD 50 C0    LDA   $C050    ;TXTCLR
035F-   4C 9A 03    JMP   $039A

; copy of ROM tape routine HEADR
0362-   A0 4B       LDY   #$4B     ;write A*256 'long 1'
0364-   20 74 03    JSR   $0374    ;half cycles
0367-   D0 F9       BNE   $0362    ;(650 usec each)
0369-   69 FE       ADC   #$FE
036B-   B0 F5       BCS   $0362    ;then a 'short 0'
036D-   A0 21       LDY   #$21     ;(400 usec)
036F-   20 74 03    JSR   $0374
0372-   C8          INY
0373-   C8          INY
0374-   88          DEY
0375-   D0 FD       BNE   $0374
0377-   90 05       BCC   $037E    ;Y is count for
0379-   A0 32       LDY   #$32     ;timing loop
037B-   88          DEY
037C-   D0 FD       BNE   $037B
037E-   AC 20 C0    LDY   $C020    ;cassette
0381-   A0 2C       LDY   #$2C
0383-   CA          DEX
0384-   60          RTS

; copy of ROM routine NXTA1
0385-   A5 2A       LDA   $2A      ;increment 2-byte A1
0387-   C5 2C       CMP   $2C
0389-   A5 2B       LDA   $2B      ;and compare to A2
038B-   E5 2D       SBC   $2D
038D-   E6 2A       INC   $2A      ;(carry set if >=)
038F-   D0 02       BNE   $0393
0391-   E6 2B       INC   $2B
0393-   60          RTS

0394-   20 3A FF    JSR   $FF3A    ;sound bell
0397-   4C 00 B0    JMP   $B000    ;start game

; copy of ROM tape routine READ
039A-   20 EE 03    JSR   $03EE    ;find TAPEIN edge
039D-   A9 16       LDA   #$16
039F-   20 62 03    JSR   $0362    ;delay 3.5 seconds
03A2-   85 0E       STA   $0E      ;init checksum = #$FF
03A4-   20 EE 03    JSR   $03EE    ;find TAPEIN edge
03A7-   A0 24       LDY   #$24     ;look for sync bit
03A9-   20 F1 03    JSR   $03F1    ;(short 0)
03AC-   B0 F9       BCS   $03A7    ;loop until found
03AE-   20 F1 03    JSR   $03F1    ;skip second sync h-cycle
03B1-   A0 3B       LDY   #$3B     ;index for 0/1 test
03B3-   20 E0 03    JSR   $03E0    ;read a byte
03B6-   81 2A       STA   ($2A,X)  ;store
03B8-   8D 00 20    STA   $2000
03BB-   45 0E       EOR   $0E
03BD-   85 0E       STA   $0E      ;update running checksum
03BF-   20 85 03    JSR   $0385    ;increment A1, compare to A2
03C2-   A0 35       LDY   #$35     ;compensate 0/1 index
03C4-   90 ED       BCC   $03B3    ;loop until done
03C6-   20 E0 03    JSR   $03E0    ;read checksum byte
03C9-   C5 0E       CMP   $0E
03CB-   F0 C7       BEQ   $0394    ;good, continue
03CD-   AD 51 C0    LDA   $C051    ;print "ERR", then continue anyway (may crash)
03D0-   A9 C5       LDA   #$C5
03D2-   20 ED FD    JSR   $FDED    ;COUT
03D5-   A9 D2       LDA   #$D2
03D7-   20 ED FD    JSR   $FDED    ;COUT
03DA-   20 ED FD    JSR   $FDED    ;COUT
03DD-   4C 94 03    JMP   $0394

; copy of ROM tape routine RDBYTE
03E0-   A2 08       LDX   #$08     ;8 bits to read
03E2-   48          PHA            ;read two transitions
03E3-   20 EE 03    JSR   $03EE    ;(find edge)
03E6-   68          PLA
03E7-   2A          ROL            ;next bit
03E8-   A0 3A       LDY   #$3A     ;count for samples
03EA-   CA          DEX
03EB-   D0 F5       BNE   $03E2
03ED-   60          RTS

; copy of ROM tape routine RDBIT
03EE-   20 F1 03    JSR   $03F1
03F1-   88          DEY            ;decrement Y until
03F2-   AD 60 C0    LDA   $C060    ;tape transition
03F5-   45 0F       EOR   $0F
03F7-   10 F8       BPL   $03F1
03F9-   45 0F       EOR   $0F
03FB-   85 0F       STA   $0F
03FD-   C0 80       CPY   #$80     ;set carry on Y register
03FF-   60          RTS
